package 剑指offer;

/**
 * @description:
 * @author: ywk
 * @date: 2020-12-10
 */
public class 最长重复子串 {
    public static void main(String[] args) {
        System.out.println(solve("abcabc"));
    }

    /**
     * 一个重复字符串是由两个相同的字符串首尾拼接而成，例如abcabc便是长度为6的一个重复字符串，而abcba则不存在重复字符串。
     * 给定一个字符串，请编写一个函数，返回其最长的重复字符子串。
     * 若不存在任何重复字符子串，则返回0。
     *
     * @param
     * @return
     */

    public static int solve(String str) {
        int len = str.length();
        String max = "";
        for (int i = len - 1; i >= 0; i--) {
            int maxLen = Math.min(i, len - i);
            if (maxLen == 0) {
                continue;
            }
            int min = maxLen;
            int count = 0;
            while (min >= 1) {
                int left = i - min;
                int right = i;
                boolean find = true;
                while (left < i) {
                    if (str.charAt(left) != str.charAt(right)) {
                        find = false;
                        break;
                    }
                    left++;
                    right++;
                }
                if (find) {
                        count = min;
                    break;
                }
                min--;
            }
            if (count != 0) {
                max = str.substring(i, i + count);
            }
        }
        System.out.println(max);
        return max.length() * 2;
    }
}
